package com.innoking.docsys.utils;


import org.apache.commons.lang.StringUtils;

import java.text.NumberFormat;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 一些数学逻辑的工具类
 * @author 宗义朋
 *
 */
public class MathUtils {

	/**
	 * 生成uuid的工具类
	 * @return
	 */
	public static String uuidMath(){
		String uuid = UUID.randomUUID().toString(); 
		//去掉“-”符号 
		String id = uuid.replaceAll("-", "");
		return id;
	}

	/**
	 * 生成百分比，百分比数小数点后保留三位
	 * @param first
	 * @param second
	 * @return
	 */
	public static String getBaiFenBi(int first,int second){
		if(second!=0){
			String q = ((double)first/second)*100 +"00000";
			return q.substring(0,6)+"%";
		}else{
			return "0";
		}
	}

	//地球平均半径  
    private static final double EARTH_RADIUS = 6378137;  
    //把经纬度转为度（°）  
    private static double rad(double d){  
       return d * Math.PI / 180.0;  
    } 
    
    /**  
     * 根据两点间经纬度坐标（double值），计算两点间距离，单位为米  
     * @param lng1  
     * @param lat1  
     * @param lng2  
     * @param lat2  
     * @return  
     */  
    public static double getDistance(double lng1, double lat1, double lng2, double lat2){  
       double radLat1 = rad(lat1);  
       double radLat2 = rad(lat2);  
       double a = radLat1 - radLat2;  
       double b = rad(lng1) - rad(lng2);  
       double s = 2 * Math.asin(  
            Math.sqrt(  
                Math.pow(Math.sin(a/2),2)   
                + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)  
            )  
        );  
       s = s * EARTH_RADIUS;  
       s = Math.round(s * 10000) / 10000;  
       return s;  
    } 
    
    /**
     * 字符串转换为double
     * @param str
     * @return
     */
    public static double string2double(String str){
    	double d =0.0;
    	try {
    		if(str!=null){
    			d = Double.valueOf(str);
    		}
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} 
	    return d;
    }
    
    /**
     * @author:zyp
     * @description 字符串转换为int
     * @date: 2018/8/30 15:32
     * @return
     */
	public static int string2int(String str){
		int d =-1;
		try {
			if(str!=null){
				d = Integer.valueOf(str);
			}
		} catch (NumberFormatException e) {
			e.printStackTrace();
		}
		return d;
	}
	
	/**
	 * @author:zyp
	 * @description 字符串转换为Long
	 * @date: 2019/3/12 15:02
	 * @return 
	 */
	public static long string2long(String str){
		Long d =-1L;
		try {
			if(str!=null){
				d = Long.valueOf(str);
			}
		} catch (NumberFormatException e) {
			return d;
		}
		return d;
	}

    /**
     * 冒泡排序集合
     * @param list
     * @param type  正序或反序
     * @return
     */
    public static List<Double> sortDouble(Double[] list,int type){
    	//默认从小到大
    	boolean isSort = true;
    	if(type==1){
    		isSort = false;
    	}
		for(int i=0;i<list.length;i++){
			for(int j=0;j<list.length-i-1;j++){
				if((list[j]>list[j+1])==isSort){
					double flag = list[j];
					list[j] = list[j+1];
					list[j+1] = flag;
				}
			}
		}
		List<Double> sortList = Arrays.asList(list);
		return sortList;
    }

    /**
     * @author:zyp
     * @description object转为int
     * @date: 2018/8/30 10:50
     * @return
     */
    public static int object2Int(Object obj){
		int objInt = 0;
		try{
			if(obj!=null){
				String objStr = obj.toString();
				objInt = Integer.parseInt(objStr);
			}
		}catch(Exception e){
    		e.printStackTrace();
		}
		return objInt;
	}

	/**
	 * @author:zyp
	 * @description  object转为Long
	 * @date: 2019/3/29 11:34
	 * @return 
	 */
    public static long object2Long(Object obj){
		long objLong = 0L;
		try{
			if(obj!=null){
				String objStr = obj.toString();
				objLong = Long.parseLong(objStr);
			}
		}catch(Exception e){
    		e.printStackTrace();
		}
		return objLong;
	}

	/**
	 * @author:zyp
	 * @description object转为double
	 * @date: 2018/8/30 10:50
	 * @return
	 */
	public static double object2double(Object obj){
		double objdouble = 0;
		try{
			if(obj!=null){
				String objStr = obj.toString();
				objdouble = Double.parseDouble(objStr);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return objdouble;
	}

    /**
     * 计算成功率
     * @param fenzi 分子
     * @param fenmu 分母
     * @return xx.xx%
     */
    public static String chenggonglv(double fenzi,double fenmu){
        //成功率=违章解锁成功总笔数/客户申请总笔数
        NumberFormat numberFormat = NumberFormat.getInstance();
        //设置精确到小数点后2位
        numberFormat.setMaximumFractionDigits(2);
        String result = numberFormat.format((fenzi/ fenmu) * 100);
        return result+"%";
    }

	/**
	 * 正则去除字符串中的空白字符
	 * @param str
	 * @return
	 */
	public static String replaceBlank(String str) {
		String result= null;
		if (StringUtils.isNotBlank(str))  {
			Pattern p = Pattern.compile("\\s*|\t|\r|\n");
			Matcher m = p.matcher(str);
			result= m.replaceAll("");
		}
		return result;
	}

}
